package tec;
import poounit.Test;
public class AutobusTest
{
    

    public  void lancer() throws TecInvalidException
    {
	System.out.println("Test de classe Autobus : ");
	
	System.out.println("."); testInstanciation(); 
	System.out.println(".");
        testMontee();

	System.out.println(".");
        testRemplissage();

	System.out.println(".");
        testChangement();

	System.out.println(".");
        testArret();

	System.out.println(".");
        testSortie();

	System.out.println(".");
        testLoufoque();

	System.out.println("OK");
    }
    @Test
    protected void testInstanciation()
    {
	Autobus bus = (Autobus) FabriqueBus.faireBus(10,10);
	assert bus.aPlaceAssise() : "test aPlaceAssise(1) incorrect";
	assert bus.aPlaceDebout() : "test aPlaceDebout(1) incorrect";

	bus = (Autobus) FabriqueBus.faireBus(0,10);
	assert !bus.aPlaceAssise() : "test aPlaceAssise(2) incorrect";
	assert bus.aPlaceDebout() : "test aPlaceDebout(2) incorrect";
	try{
	bus = (Autobus) FabriqueBus.faireBus(10,-1);
	assert bus.aPlaceAssise() : "test aPlaceAssise(2) incorrect";
	assert !bus.aPlaceDebout() : "test aPlaceDebout(2) incorrect";
	}
	catch(IllegalArgumentException e){}
    }
    @Test
    protected void testMontee() throws TecInvalidException
    {
       Autobus bus = (Autobus) FabriqueBus.faireBus(5,4);
       Sportif toto = new Sportif("tiotio",10,FabriqueComportement.faireCalme()) ;
       Sportif tata = new Sportif("tiotio",10,FabriqueComportement.faireCalme()) ;


       bus.demanderPlaceAssise(toto);
       assert toto.estAssis():"n'est pas assis";
	
       bus.demanderPlaceDebout(tata);
       assert tata.estDebout() : " n'est pas debout";
    }
    @Test
    protected void testRemplissage() throws TecInvalidException
    {
       Autobus bus = (Autobus) FabriqueBus.faireBus(2,1);

       //demande d'une place assise
       Sportif tata1 = new Sportif("tiotio",10,FabriqueComportement.faireCalme()) ;
       bus.demanderPlaceAssise(tata1);
       assert tata1.estAssis()
          : "tata1 ASSIS incorrect" ;
       //demande d'une place debout
       Sportif tata2 = new Sportif("tiotio",10,FabriqueComportement.faireCalme()) ;
       bus.demanderPlaceDebout(tata2);
       assert tata2.estDebout()
          : "tata2 DEBOUT incorrect" ;

    }
    @Test
    protected void testChangement() throws TecInvalidException
    {
       Autobus bus = (Autobus) FabriqueBus.faireBus(2,1);

       //Deux passagers assis
       Sportif tata1 = new Sportif("tiotio",10,FabriqueComportement.faireCalme());
       Sportif tata2 = new Sportif("tiotio",10,FabriqueComportement.faireCalme());
       bus.demanderPlaceAssise(tata1);
       bus.demanderPlaceDebout(tata2);

       //demander changer en debout
       bus.demanderChangerEnDebout(tata1);
       assert tata1.estDebout()
          : "tata1 DEBOUT incorrect" ;

       //demander changer en assis
       bus.demanderChangerEnAssis(tata2);
       assert tata2.estAssis()
          : "tata2  ASSIS incorrect" ;

    }
    @Test
    protected void testArret() throws TecInvalidException
    {
      
       Autobus bus = (Autobus) FabriqueBus.faireBus(2,1);

       Sportif tata1 = new Sportif("tiotio",2,FabriqueComportement.faireCalme()) ;
       bus.demanderPlaceAssise(tata1);
       
       Sportif tata2 = new Sportif("tiotio",3,FabriqueComportement.faireCalme()) ;
       bus.demanderPlaceDebout(tata2);


       //1er arrêt, tout le monde reste.
       bus.allerArretSuivant() ;
       assert tata1.estAssis()
          : "tata1 DEBOUT incorrect" ;
       assert tata2.estDebout()
          : "tata2  ASSIS incorrect" ;

       bus.allerArretSuivant();
       assert tata1.estDehors()
          : "tata1 DEBOUT incorrect" ;
       assert tata2.estDebout()
          : "tata2  ASSIS incorrect" ;

       bus.allerArretSuivant();
       assert tata1.estDehors()
          : "tata1 DEBOUT incorrect" ;
       assert tata2.estDehors()
          : "tata2  ASSIS incorrect" ;
    }
    @Test
    protected void testSortie() throws TecInvalidException
    {
       Autobus bus = (Autobus) FabriqueBus.faireBus(2,1);

       Sportif tata1 = new Sportif("tiotio",10,FabriqueComportement.faireCalme()) ;
       bus.demanderPlaceAssise(tata1);
       
       Sportif tata2 = new Sportif("tiotio",10,FabriqueComportement.faireCalme()) ;
       bus.demanderPlaceDebout(tata2);

       bus.demanderSortie(tata1) ;
       assert tata1.estDehors()
          : "tata1 DEHORS incorrect" ;
       assert tata2.estDebout()
          : "tata2 DEBOUT incorrect" ;

       bus.allerArretSuivant();
       bus.demanderSortie(tata2);
       assert tata1.estDehors()
          : "tata1 DEHORS incorrect" ;
       assert tata2.estDehors()
          : "tata2 DEHORS incorrect" ;
    }
    @Test
    protected void testLoufoque() throws TecInvalidException
    {
       Autobus bus = (Autobus) FabriqueBus.faireBus(2,1);
       Sportif tata1 = new Sportif("tiotio",10,FabriqueComportement.faireCalme()) ;
       bus.demanderChangerEnDebout(tata1);
       bus.demanderSortie(tata1);
    }
}
